var redis = require("redis");
    client = redis.createClient();
	client2 = redis.createClient();
	client3 = redis.createClient();

// 扔一个漂流瓶
exports.throw = function(bottle, callback) {
	// 检查2号数据库检查用户是否超过扔瓶子的次数
	client2.SELECT(2, function() {
		client2.GET(bottle.owner, function(err, result) {
				if (result >= 10) {
					return callback({
						code: 0,
						msg: "今天的瓶子已经用完"
					})
				}
		});
	});

	// 扔瓶子次数 +1
	client2.INCR(bottle.owner, function() {
		// 检查是否是当日第一次扔瓶子
		// 若是，若是，设置给几率扔瓶子次数键生存期为1天
		// 不是的场合，保存生存期不变
		client2.TTL(bottle.owner, function(ree, ttl) {
			if (ttl === -1) {
				client2.PEXPIRE(bottle.owner, 86400000);
			}
		})
	});


	bottle.time = bottle.time || Date.now();
	// 为漂流瓶随机生成一个id
	var bottleId = Math.random().toString(16);
	var type = {
		male: 0,
		female: 1
	};

	// 根据漂流瓶类型不同酱漂流瓶保存到不同得数据库
	client.SELECT(type[bottle.type], function() {
		// 以 hash 类型保存漂流瓶对象
		client.HMSET(bottleId, bottle, function(err, result) {
			if (err) {
				return callback({
					code: 1,
					msg: "过会儿再试试吧！"
				});
			}
			// 成功的场合 返回 OK
			callback({
				code: 1,
				msg: result
			});
			// 设置瓶子生存周期为1天
			client.PEXPIRE(bottleId, 86400000);

		});
	});
};


// 捡一个瓶子
exports.pick = function(info, callback) {

	// 先到3号数据库检查用户是否超过捡瓶子数量限制
	client3.SELECT(3, function() {
		// 获取用户建平字的次数
		client3.GET(info.user, function(err, result) {
			if (result >= 10) {
				return callback({
					code: 0,
					msg: "今天捡瓶子的机会已经用完了"
				})
			}

			// 捡瓶子次数 +1
			client3.INCR(info.user, function(err, result) {
				// 检查是否是当天第一次捡瓶子
				// 是的场合 设定生存周期为1天
				// 不是的场合 生存周期保持不变
				client3.TTL(info.user, function(err, ttl) {
					if (ttl === -1) {
						client3.PEXPIRE(info.user, 864000000);
					}
				})
			})
		})
	});



	// 设置20%的概率捡到海星
	if (Math.random() <= 0.2) {
		return callback({
			code: 0,
			msg: "这是海星"
		})
	}

	var type = {
		all: Math.round(Math.random()),
		male: 0,
		female: 1
	};

	info.type = info.type || "all";

	// 根据瓶子类型不同，到不同得数据库中取 
	client.SELECT(type[info.type], function() {
		// 随机返回一个漂流瓶id
		client.RANDOMKEY(function(err, bottleId) {
			if (!bottleId) {
				return callback({
					code: 0,
					msg: "大海空空如也....."
				})
			}

			// 根据漂流id 取得具体内容
			client.HGETALL(bottleId, function(err, bottle) {
				if (err) {
					return callback({
						code: 0,
						msg: "漂流瓶破损了....."
					})
				}

				// 返回结果 成功时包含漂流瓶信息
				callback({
					code: 1,
					msg: bottle
				});
				// redis 中删除该漂流瓶
				client.DEL(bottleId);
			})
		})
	})
};


// 将捡到的漂流瓶扔到海里
exports.throwBack = function(bottle, callback) {
	var type = {
		male: 0,
		famale: 1
	};

	// 为漂流瓶生成一个id
	var bottleId = Math.random().toString(16);
	// 根据漂流瓶类型不同保存到不同的数据路
	client.SELECT(type[bottle.type], function() {
		// 以hash类型存储漂流瓶对象
		client.HMSET(bottleId, bottle, function(err, result) {
			if (err) {
				return callback({
					code: 0,
					msg: "过一会儿再试试吧！"
				})
			}

			// 成功的场合，返回 OK
			callback({
				code: 1,
				msg: result
			});

			// 根据漂流瓶的原始时间设置生存周期
			client.PEXPIRE(bottleId, bottle.time + 86400000 - Date.now());
		})
	})
};
